Calling Pike Code

[ Start > PikeDevel > C Modules > Calling Pike Code ] [ Edit this Page | Show Page Versions | Show Formatted ]


__Calling pike functions from within C/CMOD code__

Here's some code for calling (whether they're written in c or pike) functions from your C language module code. Remember that you can create objects this way because create is called implicitly, just ask for the class name you want to instantiate:

{code}
// this code works for a function that takes one argument.
// you'll have to modify it to get it to understand multiple args.
// args are at top of stack


// look up the function
push_text( "Sql.sql_result");
SAFE_APPLY_MASTER("resolv", 1 ); 


// method is at top of the stack, we want the arg on top
stack_swap(); 


// arg is at top, function is 1 down from the top
apply_svalue( Pike_sp-2, 1 );


// result is at top of the stack, function is still one down
// and we want to pop it.
stack_swap(); 
pop_stack();
{code}

To run the function "query" in the current object with one arg, already on the stack:
{code}
// get the identifier for the member we want to call
int i;
i=find_identifier("query", Pike_fp->current_object->prog);


// now call the method with the context of the current object.
apply_low(Pike_fp->current_object, i, 1);
{code}

Another option:

{code}

   /* push arguments on stack */
   apply(Pike_fp->current_object, "the method", number_of_args);

{code}


The return value will be on the stack, don't forget to
pop it after you are done with it.



Powered by PikeWiki2

 
gotpike.org | Copyright © 2004 - 2009 | Pike is a trademark of Department of Computer and Information Science, Linköping University